/*
 * Lcd.c
 *
 * Created: 2012-10-04 18:58:56
 *  Author: ur
 */ 
#include "Lcd.h"
#include <stdint.h>
#include <avr/pgmspace.h>
#include <string.h>
#include "hd44780.h"

#define czas_zaloczenia 20			//krotonosc sysclocka
#define czas_wylaczenia 20			//krotnosc  syscklocka


uint8_t bufor_linia1[dlugosc_wiersza+1];
uint8_t bufor_linia2[dlugosc_wiersza+1];
uint8_t bufor_linia1_blink[dlugosc_wiersza+1];
uint8_t bufor_linia2_blink[dlugosc_wiersza+1];


uint8_t licznik_pozycji=0;

void lcd_blink(char * bufor,uint8_t linia ,uint8_t	 start, uint8_t ilosc_znakow)
{	//static uint8_t timer_on=0;
	//static uint8_t timer_off=0;

};



void lcd_pgm_write_bufor(char * lancuch_tekstowy,char *bufor_docelowy, uint8_t start, uint8_t linia)
{ 
	
};

void lcd_ram_write_bufor(char * lancuch_tekstowy,char *bufor_docelowy, uint8_t start, uint8_t linia)
{
	
};


void lcd_clear(uint8_t linia)
{
	licznik_pozycji=0;
	if(linia==linia_1)
	{memset(bufor_linia1,' ',dlugosc_wiersza);
	memset(bufor_linia1_blink,0,dlugosc_wiersza);
	}		
	if(linia==linia_2)
	{memset(bufor_linia2,' ',dlugosc_wiersza);
		memset(bufor_linia2_blink,0,dlugosc_wiersza);
	}
// {uint8_t i;
// 	for (i=0; i<dlugosc_bufora;i++)
// 	{
// 		//bufor[i]=0;
// 	}
	
};

void lcd_linia1(uint8_t flaga, const char * bufor_znakowy,uint8_t offset)  //flagi CLR-czysci bufor,PROG-znaki w pamieci flash, BLINK- wsywietla bufor migajacy
{	uint8_t i;
	licznik_pozycji=licznik_pozycji+offset;
	if (flaga & PROG)
	{
		
	
		for (i=0;(licznik_pozycji<16)&&(pgm_read_byte(&bufor_znakowy[i])!=0);i++,licznik_pozycji++)
		{	if(flaga&BLINK)
			bufor_linia1_blink[licznik_pozycji]=pgm_read_byte(&bufor_znakowy[i]);
			else
			bufor_linia1[licznik_pozycji]=pgm_read_byte(&bufor_znakowy[i]);
		}
	}	
	else
	{	
		for (i=0;(licznik_pozycji<16)&&(bufor_znakowy[i]!=0);i++,licznik_pozycji++)
		{	if(flaga&BLINK)
			bufor_linia1_blink[licznik_pozycji]=bufor_znakowy[i];
			else
			bufor_linia1[licznik_pozycji]=bufor_znakowy[i];
		}

	}	

	
	
}


void lcd_linia2(uint8_t flaga,const char * bufor_znakowy, uint8_t offset)  //flagi CLR-czysci bufor,PROG-znaki w pamieci flash, BLINK- wsywietla bufor migajacy
{	
	uint8_t i;
	licznik_pozycji=licznik_pozycji+offset;
	if (flaga & PROG)
	{
		
		
		for (i=0;(licznik_pozycji<16)&&(pgm_read_byte(&bufor_znakowy[i])!=0);i++,licznik_pozycji++)
		{	if(flaga&BLINK)
			bufor_linia2_blink[licznik_pozycji]=pgm_read_byte(&bufor_znakowy[i]);
			else
			bufor_linia2[licznik_pozycji]=pgm_read_byte(&bufor_znakowy[i]);
		}
	}
	else
	{
		for (i=0;(licznik_pozycji<16)&&(bufor_znakowy[i]!=0);i++,licznik_pozycji++)
		{
			if(flaga&BLINK)
			bufor_linia2_blink[licznik_pozycji]=bufor_znakowy[i];
			else
			bufor_linia2[licznik_pozycji]=bufor_znakowy[i];
		}

	}



}



/////////////////////////////////////////////////////
// wyswietlanie bufora 
/////////////////////////////////////////////////////

void display_bufor(void)
{	enum  {blink_on, blink_off};
	static uint8_t  timer_blink=czas_wylaczenia;
	static uint8_t  blink_status=blink_off;
	uint8_t tmp_bufor_1[dlugosc_wiersza+1];
	uint8_t tmp_bufor_2[dlugosc_wiersza+1];
	uint8_t i;
	
	switch (blink_status)
	{
		case blink_on:
		
		for (i=0;i<dlugosc_wiersza+1;i++)
		{	if(bufor_linia1_blink[i]==0)tmp_bufor_1[i]=bufor_linia1[i];
			else
			{
				tmp_bufor_1[i]=bufor_linia1_blink[i];
			}
			if(bufor_linia2_blink[i]==0)tmp_bufor_2[i]=bufor_linia2[i];
			else
			{
				tmp_bufor_2[i]=bufor_linia2_blink[i];
			}
			
			
			
		
		}
		
		if(0==timer_blink--)
		{
			timer_blink=czas_wylaczenia;
			blink_status=blink_off;
		}
		break;
		
		
		case blink_off:
		
		for (i=0;i<dlugosc_wiersza+1;i++)
		{
			tmp_bufor_1[i]=bufor_linia1[i];
			tmp_bufor_2[i]=bufor_linia2[i];
			
			
		}
		
		if(0==timer_blink--)
		{
			timer_blink=czas_zaloczenia;
			blink_status=blink_on;
		}
		
		break;
		

	
	}
	
	LCD_GoTo(0,0);
	
		
	LCD_WriteText(tmp_bufor_1);
	
	LCD_GoTo(0,1);
	
	LCD_WriteText(tmp_bufor_2);
	
	
	
	
			
			
}